<?php
/**
 * @Author: Marte
 * @Date:   2018-03-22 10:00:38
 * @Last Modified by:   Marte
 * @Last Modified time: 2018-03-22 17:52:40
 */
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Session;
use Illuminate\Http\Response;
class FormController extends Controller{
    public function formtest(Request $request){
        // 1.Request
        // laravel中的请求使用的是symfony/http-foundation组件：请求里存放$_GET/$_POST/$_SERVER/$_FILES/$_COOKIE..全局变量
        //      获取请求中的值
                // echo $request->input('id');
                // 加上默认值
                // echo $request->input('ss','未知');
                // 判断请求中是否有这个参数的值
                // if($request->has('id')){
                //     echo $request->input('id');
                // }else{
                //     echo '未知';
                // }
                // 取请求中的所有参数
                // dd($request->all());
        //      判断请求的类型
        //      获取当前请求的类型
                // echo $request->method();
                // 判断当前请求是否是自己需要的类型
                // if($request->isMethod('POST')){
                //     echo '是';
                // }else{
                //     echo "否";
                // }
        //      判断是否是ajax请求
                // var_dump($request->ajax());//true | false
        // 判断请求中的路径是否符合特定的格式
                // var_dump($request->is('form/*'));
        // 获取当前的URL
                // echo $request->url();

        // 3.Response
        // 4.Middleware
    }

    public function session1(Request $request){
        // 2.Session,config/session.php,默认使用file驱动,一般要使用session前要session_star();在laravel中Kernel.php > web数组里会自动开启StarSession::class;
        // 需要在路由中配置middlware

                // HTTP request类中的session()方法,设置一组session键值对
                // $request->session()->put('key','value');

                // session()辅助函数
                // session()->put('key2','value2');


                // Session facade,需引入 :  use Illuminate\Support\Facades\Session;
                // session::put('key3','value3');


                // 以数组的形式存一个值在session中
                // session::put(['key4' => 'value4','a'=>'b']);

                // 在session的同一个下标下存数组数据
                // session()->push('as','d');
                // session()->push('as','e');


                // 删除session中某个下标的数据
                // session()->forget('key1');

                // 把session清空
                // session::flush();

                // 第一次访问有效，第二次(刷新)就删了(暂存数据)
                // session::flash('key-flash','value-flash');


    }

    // 打印session专用
    public function session2(Request $request){

                return session::get('msg','快闪数据没有了');//重定向带暂存数据

                // return '重定向成功';

                // HTTP request类中的session()方法,取session1中设置的数据
                // echo $request->session()->get('key')."<br>";
                // session()辅助函数
                // echo session()->get('key2')."<br>";
                // Ssession facade
                // echo session::get('key3')."<br>";

                // 如果获取不存在的session下标,第二个参数为默认值
                // echo session::get('key4','defult')."<br>";

                // 取出session中所有的值
                // dd( session::all());

                // 判断 Session 中是否存在指定项
                // if(session()->has('key4')){
                //     echo '存在';
                // }

                // 打印存在这个下标的数组
                // print_r($request->session()->get('as'));//Array ( [0] => d [1] => e )

                // 取出这个数据就删除这个数据
                // print_r($request->session()->pull('as','defult'));

                // 打印已忘记的下标
                // echo session()->get('key1','不见了');

                // echo session::get('key-flash');

    }

    // Response
    public function Response1(){
        // 常见的响应类型 response()类、引入: use Illuminate\Http\Response;

        // 字符串
        // return 'aaa';

        // 视图
        // return response()->view('hello', $data, 200)->header('Content-Type', $type);// HTTP 状态码和头信息
        // return view('test.section',['name'=>$name,'arr'=>$arr]);
        // return view('hello');

        //Json
        // $data = ['errCode'=>0,'errMsg'=>'success','data'=>'sd'];
        // return response()->json($data);

        // 重定向
        // return redirect('session2');

        // 重定向到session2；
        // 同控制器下
        // return redirect('session2')->with('msg','我是快闪数据');//原理:session::flash(),暂存数据；
        // 控制器@方法
        // return redirect()->action('FormController@session2')->with('msg','我是快闪数据');//原理:session::flash(),暂存数据；
        // 路由别名
        // return redirect()->route('session2')->with('msg','谁是SD');
        // 返回上一级
        // return redirect()->back();
    }

    // Controller之Middleware
    // 作用：laravel中间件提供的一个方便的机制来过滤进入应用程序的HTTP请求
    // 场景：有一个活动，在指定日期后开始，如果没开始，只能访问活动宣传页面
    // 知识点：新建中间件、注册中间件 、使用中间件，中间件的前置操作和后置操作
    // 新建中间件:app/http/Middlewre下新建一个Activity.php，写出规则
    // 注册中间件：app/http/Kernel.php中的 protected $routeMiddleware,加上我们的中间件
    // 使用中间件：在路由中添加一个中间件路由组

    // 活动的宣传页面
    public function activity(){

        return "活动快要开始，敬请期待";
    }

    public function activity1(){
        return "活动进行中1，欢迎到来1";
    }
    public function activity2(){
        return "活动进行中2，欢迎到来2";
    }
    public function activity3(){
        return "活动已结束，谢谢参与";
    }

}